package dao.mysql;

import dal.Conexion;
import dao.RutaDao;
import dto.Ruta;
import java.sql.ResultSet;
import java.util.Vector;
import org.apache.log4j.Logger;

/**
 *
 * @author Jose Carlos Gutierrez
 */
public class RutaDaoMySQL extends RutaDao{

    private static Logger log = Logger.getLogger(TerminalDaoMySQL.class);

    @Override
    public void update() throws Exception {
        Conexion objConexion = Conexion.getOrCreate();
        StringBuffer query = new StringBuffer("SELECT FN_UPDATE_RUTAS(");
        query.append(objDto.getId()).append(",");
        query.append(objDto.getIdOrigen()).append(",");
        query.append(objDto.getIdDestino()).append(",");
        query.append(objDto.getPorcentajeLluvia()).append(",");
        query.append(objDto.getDensidadMaximaLluvia()).append(",");
        query.append(objDto.getDistancia()).append(",");
        query.append(objDto.getIdConcurrencia()).append(") ID");
        log.debug(query.toString());
        ResultSet objResultSet = objConexion.ejecutar(query.toString());
        int id = 0;
        if(objResultSet!=null && objResultSet.next() && (id=objResultSet.getInt("ID")) > 0)
            objDto.setId(id);
        else{
            objConexion.desconectar();
            throw new Exception();
        }
        objConexion.desconectar();
    }

    @Override
    public void delete() {
        Conexion objConexion = Conexion.getOrCreate();
        try {
            StringBuffer query = new StringBuffer("SELECT FN_DELETE_RUTA(");
            query.append(this.objDto.getId()).append(",");
            query.append(this.objDto.getIdConcurrencia()).append(") AS ROWS");
            ResultSet objResultSet = objConexion.ejecutar(query.toString());
            objResultSet.next();
            int id = objResultSet.getInt("ROWS");
            if(id > 0)
                objDto.setId(id);
            else{
                objConexion.desconectar();
                throw new Exception();
            }
            objConexion.desconectar();
        } catch (Exception e) {
        }
    }

    @Override
    public Vector<Ruta> selectTodos() {
        Conexion objConexion = Conexion.getOrCreate();
        Vector<Ruta> objVector = new Vector<Ruta>();
        try {
            StringBuffer query = new StringBuffer("SELECT ");
            query.append("r.ID ID, r.ID_ORIGEN ID_ORIGEN, r.ID_DESTINO ID_DESTINO, ");
            query.append("r.PORCENTAJE_LLUVIA PORCENTAJE_LLUVIA, r.DENSIDAD_MAXIMA_LLUVIA DENSIDAD_MAXIMA_LLUVIA, ");
            query.append("r.DISTANCIA DISTANCIA, r.DISTANCIA DISTANCIA, r.ID_CONCURRENCIA ID_CONCURRENCIA, ");
            query.append("fn_get_nombre_terminal(r.ID_ORIGEN) NOMBRE_ORIGEN, fn_get_nombre_terminal(r.ID_DESTINO) NOMBRE_DESTINO ");
            query.append("FROM tbl_rutas r");
            log.info(query.toString());
            ResultSet objResultSet = objConexion.ejecutar(query.toString());

            while(objResultSet.next()){
                int id = objResultSet.getInt("ID");
                int idOrigen = objResultSet.getInt("ID_ORIGEN");
                int idDestino = objResultSet.getInt("ID_DESTINO");
                String nombreOrigen = objResultSet.getString("NOMBRE_ORIGEN");
                String nombreDestino = objResultSet.getString("NOMBRE_DESTINO");
                double porcentajeLluvia = objResultSet.getDouble("PORCENTAJE_LLUVIA");
                double densidadMaximaLluvia = objResultSet.getDouble("DENSIDAD_MAXIMA_LLUVIA");
                double distancia = objResultSet.getDouble("DISTANCIA");
                int idConcurrencia = objResultSet.getInt("ID_CONCURRENCIA");

                Ruta objRuta = new Ruta();
                objRuta.setId(id);
                objRuta.setIdOrigen(idOrigen);
                objRuta.setIdDestino(idDestino);
                objRuta.setPorcentajeLluvia(porcentajeLluvia);
                objRuta.setDensidadMaximaLluvia(densidadMaximaLluvia);
                objRuta.setDistancia(distancia);
                objRuta.setIdConcurrencia(idConcurrencia);
                objRuta.setNombreOrigen(nombreOrigen);
                objRuta.setNombreDestino(nombreDestino);

                objVector.addElement(objRuta);
            }
        } catch (Exception e) {
        }

        return objVector;
    }

    @Override
    public Ruta select(int id) {
        Conexion objConexion = Conexion.getOrCreate();
        try {
            String query = "SELECT * FROM tbl_rutas WHERE id ="+id;
            ResultSet objResultSet = objConexion.ejecutar(query);

            if(objResultSet.next()){
                id = objResultSet.getInt("ID");
                int idOrigen = objResultSet.getInt("ID_ORIGEN");
                int idDestino = objResultSet.getInt("ID_DESTINO");
                double porcentajeLluvia = objResultSet.getDouble("PORCENTAJE_LLUVIA");
                double densidadMaximaLluvia = objResultSet.getDouble("DENSIDAD_MAXIMA_LLUVIA");
                double distancia = objResultSet.getDouble("DISTANCIA");
                int idConcurrencia = objResultSet.getInt("ID_CONCURRENCIA");

                Ruta objRuta = new Ruta();
                objRuta.setId(id);
                objRuta.setIdOrigen(idOrigen);
                objRuta.setIdDestino(idDestino);
                objRuta.setPorcentajeLluvia(porcentajeLluvia);
                objRuta.setDensidadMaximaLluvia(densidadMaximaLluvia);
                objRuta.setDistancia(distancia);
                objRuta.setIdConcurrencia(idConcurrencia);

                return objRuta;
            }
        } catch (Exception e) {
        }

        return null;
    }

}
